package org.projetjava.metier.dao;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.projetjava.metier.model.DescriptifComplexe;
import org.projetjava.metier.model.Lieu;
import org.projetjava.metier.model.Poi;





public class LieuDao {

	private Connection con;
	
	private PreparedStatement prepStatRechNomExact = null;
	private PreparedStatement prepStatRechPartieNom = null;
	private PreparedStatement prepStatRechNomDescription = null;
	private PreparedStatement prepStatLibelleLieu = null;

	
	public LieuDao()
	{
		Bdd bdd = new Bdd();
		
		this.con = bdd.getConnection();
		
		bdd = null;
	}
	
	public List<String> rechercheParNomExact(String recherche){
		List<String> listResultat = new ArrayList<>();
			try {
			
				if(this.prepStatRechNomExact == null)
				{
					this.prepStatRechNomExact = this.con.prepareStatement("SELECT Libelle_Lieu FROM Lieu WHERE Libelle_Lieu = ?");
				}
				
				this.prepStatRechNomExact.setString(1, recherche);
			     
			    ResultSet result = this.prepStatRechNomExact.executeQuery();
			      
			      
			     
			    while(result.next()){         
			    	listResultat.add(result.getObject(1).toString());
			    }
	
			    result.close();
		         
			} catch (SQLException e) { 
				e.printStackTrace();
		    }
		return listResultat;
	}
	
	public List<String> rechercheParNon(String recherche)
	{
		String like = "%" + recherche + "%";  
		List<String> listResultat = new ArrayList<>();
		
		try {
		
			if(this.prepStatRechPartieNom == null)
			{
				this.prepStatRechPartieNom = this.con.prepareStatement("SELECT Libelle_Lieu FROM Lieu WHERE Libelle_Lieu LIKE ?");
			}
			
			this.prepStatRechPartieNom.setString(1, like);
		     
		    //L'objet ResultSet contient le r�sultat de la requ�te SQL
		    ResultSet result = this.prepStatRechPartieNom.executeQuery();

		    while(result.next()){         
		    	listResultat.add(result.getObject(1).toString());
		    }

		    result.close();
	         
		} catch (SQLException e) { 
			e.printStackTrace();
	    }
	  return listResultat;
		
	}
	
	public List<String> rechercheParLibelleDescription(String recherche)
	{
		String like = "%" + recherche + "%"; 
		List<String> listResultat = new ArrayList<>();
		
		try {
		
			if(this.prepStatRechNomDescription == null)
			{
				this.prepStatRechNomDescription = this.con.prepareStatement("SELECT Libelle_Lieu FROM Lieu WHERE Libelle_Lieu LIKE ? OR Texte_Description_Lieu LIKE ?");
			}
			
			this.prepStatRechNomDescription.setString(1, like);
			this.prepStatRechNomDescription.setString(2, like);
		     
		    //L'objet ResultSet contient le r�sultat de la requ�te SQL
		    ResultSet result = this.prepStatRechNomDescription.executeQuery();

		    while(result.next()){         
		    	listResultat.add(result.getObject(1).toString());
		    }

		    result.close();
	         
		} catch (SQLException e) { 
			e.printStackTrace();
	    }
	  return listResultat;
		
	}
	
	public Lieu selectionLieu(String libelle)
	{
		
		String imageLien = null;
		int idLieu = 0;
		
		try {
			if(this.prepStatLibelleLieu == null)
			{
				this.prepStatLibelleLieu = this.con.prepareStatement("SELECT ID_Lieu,Image_Lieu FROM Lieu WHERE Libelle_Lieu=?");
			}
			
			this.prepStatLibelleLieu.setString(1, libelle);
			
			ResultSet result = this.prepStatLibelleLieu.executeQuery();
			
			while(result.next()){          
				if(result.first())
				{
					idLieu = (int) result.getObject(1);
					imageLien = result.getObject(2).toString();
				}
			}

		    result.close();
		    
		    
		    

		} catch (SQLException e) { 
			e.printStackTrace();
		}
		
		
		
		
		//constructeur lieu
		Lieu lieu = new Lieu(libelle, imageLien);
			
		return lieu;
	}

}
